Recent trends in CPU chip design provide multiple CPU cores on the same die. The cores may share a common communications bus and main memory, but cache designs may vary to include separate L1 and L2, options for shared L3, shared L2 but separate L1, and direct access L1 across cores. The use of shared memory allocation techniques that can draw memory from a large shared pool has been used in some data processing approaches. Both multi-core CPUs and shared memory allocation techniques are now used on high-performance servers.
In some high-power servers, the large amount of CPU power that they provide may, in some cases, be under-utilized. Therefore, server users have begun deploying virtualization software that permits running multiple operating system instances (guest operating systems) on a single server. The opportunities provided by virtualization, real time monitor operating systems, and multi-core CPU chipsets may be combined and improved to produce a flexible open platform for I/O control and protection along with a common management interface as a beneficial side-effect. For example, one or more processors of an endpoint device may be dedicated as a network core. The network core may be configured to host a common offload stack to provide a unified network interface for the multiple operating system instances running on the endpoint device or host.
The common offload stack may appear to the guest operating systems as being on the network. As a result, the network, file, and storage I/O functionality may allow the offload stack to function, in effect, as an intermediate embedded network device capable of bridging, switching or even routing between operating systems on the server, and off of the server when operating in conjunction with other (external) network devices deeper in a network. An offload stack in the Open Systems Interconnection Reference Model (OSI model) may include, among other components, a Transmission Control Protocol (TCP) layer, an Internet Protocol (IP) layer and an Ethernet driver.
Data exchange between two operating systems using a TCP stack may include first converting the data into TCP segments, adding IP headers with IP addresses to the data and adding MAC addresses when the data is received at the offload stack and then sending the data from the offload stack and stripping the previously added headers and reassembling the data from the TCP segments. The same operations may need to be performed even when data is exchanged between two operating systems residing on the same hardware.